1.使用nodejs將html5 canvas base64編碼圖片保存為文件
2.谷歌2億2千5百萬用戶ID遭曝光
3.nodejs 如何讀取遠程的圖片並顯示出來?
1.nodejs 將 canvas 圖片保存為文件
內容摘要:
目前流行的“你畫我猜”應用,你有沒有想過使用HTML5來實現過?那麼不可避免的需要解決canvas保存圖片到硬盤或mongodb之類的數據庫。本文主要介紹使用nodejs將html5 canvas base64編碼圖片保存為文件,同時提供兩種解決方案。
實現方式:
var express = require('express');
var fs = require("fs");
var app = module.exports = express();
//配置
app.configure(function(){
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session());
  app.use(app.router);
  app.use(express.static(__dirname + '/up')); //靜態文件目錄
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
//保存base64圖片POST方法
app.post('/upload', function(req, res){
    //接收前台POST過來的base64
    var imgData = req.body.imgData;
    //過濾data:URL
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    var dataBuffer = new Buffer(base64Data, 'base64');
    fs.writeFile("out.png", dataBuffer, function(err) {
        if(err){
          res.send(err);
        }else{
          res.send("保存成功!");
        }
    });
});
if (!module.parent) {
  app.listen(8000);
  console.log('Express started on port 8000');
}
2.圖片代理 讀取遠程的圖片並顯示出來
內容摘要:
現在需要這樣一個功能: 通過 GET 參數 "url" , 讀取圖片並顯示圖片
程式碼(問題已解決):
var http = require('http');
var url = require('url');
http.createServer(function(req, res) {
    var params = url.parse(req.url, true);
    var IMGS = new imageServer(http, url);
    IMGS.http(params.query.url, function(data) {
        res.writeHead(200, {"Content-Type": data.type});
        res.write(data.body, "binary");
        res.end();
    });
}).listen(8124);
var imageServer = function(http, url) {
    var _url = url;
    var _http = http;
    this.http = function(url, callback, method) {
        method = method || 'GET';
        callback = callback ||
        function() {};
        var urlData = _url.parse(url);
        var request = _http.createClient(80, urlData.host).
        request(method, urlData.pathname, {
            "host": urlData.host
        });
        request.end();
        request.on('response', function(response) {
            var type = response.headers["content-type"],
                body = "";
            response.setEncoding('binary');
            response.on('end', function() {
                var data = {
                    type: type,
                    body: body
                };
                callback(data);
            });
            response.on('data', function(chunk) {
                if (response.statusCode == 200) body += chunk;
            });
        });
    };
};
3.僅 71 行(包含註釋)的 nodejs 腳本,抓取 Google Plus 上的大量ID
內容摘要:
英國人Robert Pitt今早在Github上公佈了他的爬蟲腳本,導致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。早在幾個月之前Robert就向谷歌報告此漏洞,谷歌放任自流,遭此劫數。
爬蟲腳本:
/*
 * Google Profile Information Fun
*/
/*
 * Require Libraries
*/
var http	= require('http');
var url		= require('url');
var fs		= require('fs');
var locRegex = new RegExp("<loc>(.*?)</loc>","gi");
var packages = [];
/*
 * Starting Link
*/
var baseOptions = {
	host : 'www.gstatic.com',
	port : 80,
	path : '/s2/sitemaps/profiles-sitemap.xml'
};
http.get(baseOptions, function(response){
	if(response.statusCode != 200)
	{
		console.error("Initial stack was not found");
		process.exit();
	};
	var stack = '';
	response.on('data', function(chunk){
		stack += chunk;
	});
	response.on('end', function(){
		var match = null;
		while(match = locRegex.exec(stack))
		{
			packages.push(match[1]);
		}
		processPackages();
	});
}).on('error', function(e) {
    console.log("Got error<getting base>: " + e.message);
});
var processPackages = function()
{
	var totalPackages = packages.length;
	for(var i = 0; i < packages.length; i++)
	{
		var requestOptions = url.parse(packages[i]);
		(function(index){ //Do not use i inside thise scope.. noob
			http.get(requestOptions, function(response){
				if(response.statusCode != 200)
				{
					console.log("failed to get package form google");
					return;
				}
				response.pipe(fs.createWriteStream("./data/segment_" + index + ".txt"));
				console.log("Piping " + index + " of " + totalPackages * index + " into ./data/segment_" + index + ".txt");
			}).on('error', function(e) {
    console.log("Got error<getting packages>: " + e.message);
});
		})(i);
	}
}
導致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。
用戶的ID信息是指那些呢? 帳/密??還是mail Addr?
常用的關鍵字? 私密的照片?(無名正妹照),還是銀行帳戶??
這70行,看不太出來,取出了那些訊息??
其實就是 "用戶的ID"
我實際執行的抓到資料如下
https://plus.google.com/用戶ID
or
https://profiles.google.com/用戶ID
您好,
請問這裡的requestOptions是什麼意思呢?var requestOptions = url.parse(packages[i]);